<?php
/**
 * class FavoritesAdderController
 * Выводит блок с кнопкой "добавить в избранное" выше основного контента
 */
class FavoritesAdderController extends ComponentController implements IObservable{
    
    private $observers = array();
    private $model;
    private $view;
    
    public function __construct() {
        parent::__construct();
        //добавляем слушателя сообщений
        $this->addObserver($this->messagesobserver);   
        $this->model = new FavoritesAdderModel();
        $this->view = new FavoritesAdderView();
        
        $this->getFavoritesBox();
        
        
        if(@$_POST['action'])
        {
            
            call_user_func_array('handler_'.$_POST['action'], $this, $_POST);
            
        }
        
        
        
        return true;
    }  
    
    
    /**
     * Валидатор для формы добавления в избранное
     * @param type $data
     * @return boolean 
     */
    private function favoriteValidate($data) {
        return true;
    }
    /**
     * сабмиттер для кнопки добавления в избранное
     * @param type $data
     * @return boolean 
     */
    private function favoriteSubmit($data) {   
        
        //если закладка уже добавлена
        if($this->model->isAlreadyAdded($_GET['rewritequery'],$this->user->user_id))
        {
            $this->fireEvent('message', array('message'=>"Страница уже есть в избранном"));   
        }
        else
        {
            $this->fireEvent('message', array('message'=>"Страница добавлена в избранное"));   
            $this->model->saveFavorite(array('user_id'=>$this->user->user_id, 'page'=>  strtolower($_GET['rewritequery'])));
        }
        
        return true;
    }

    /**
     * Выводит форму добавления в избранное, вызывает её обработчики
     * @return boolean 
     */
    private function getFavoritesBox() {  

        if(@$_POST['submit_favorite'])
        {
            if($this->favoriteValidate($_POST))
            {
                $this->favoriteSubmit($_POST);
            }
        }
        $pagedata = array();     
        $pagedata[] = array('data'=> FavoritesAdderView::getAddButton($this->model->isAlreadyAdded($_GET['rewritequery'], $this->user->user_id)), 'region'=>$this->region);
        $this->output($pagedata);
        return true;
    }

    /**
     * реализация интерфейса IObservable
     * @param IObserver $objObserver 
     */
    public function addObserver(IObserver $objObserver) {
        $this->observers[] = $objObserver;
    }
    /**
     * реализация интерфейса IObservable
     * @param IObserver $objObserver 
     */
    public function fireEvent($eventType, $data) {
        if (is_array($this->observers)) {
            foreach ($this->observers as $objObserver) {
                $objObserver->notify($eventType, $data);
            }
        }
    }
}
?>
